﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一题：
            //一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
            //请编写相关代码，
            //1、捕获FormatException异常，并打印输出“异常已处理；
            //2、捕获OverflowException异常，数值超出float范围的异常，并打印输出“异常已处理；
            //3、捕获一般异常Exception异常。
            //4、最终处理finally
            //录入成绩结束后，请输出，总学生数，总分数，平均分。

            //第二题：
            //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，
            //另一个值表示用户想要从银行账户中提取的金额。
            //实现存取款功能，
            //用户功能选择：1、存款，2、取款
            //取款时：
            //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，
            //异常信息可以写“取款金额大于余额，请重新输入”
            //，如此以确保取款金额始终不大于当前余额。
            //操作结束，打印输出余额是多少。
            //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。
            test2();
            Console.ReadKey();
        }
        static void test1()
        {
                float  sum = 0, avg = 0;
                int count = 0;
            List<float> list = new List<float>();
            try
            {
                login:
                while (true)
                {
                Console.WriteLine("输入考试成绩：");
                float a = float.Parse(Console.ReadLine());
                    list.Add(a);
                    sum += a;avg = sum / list.Count;
                    mistake:
                    Console.WriteLine("是否继续添加(y/n)：");
                    string into = Console.ReadLine();
                    if (into=="n")
                    {
                        break;
                    }
                    else if (into == "y")
                    {
                        goto login;
                    }
                    else
                    {
                        Console.WriteLine("请输出正确指令（y|n）");
                        goto mistake;
                    }
                }
                
            }
            catch (FormatException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("异常已处理");
            }
            catch (OverflowException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("异常已处理");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("异常已处理");
            }
            finally
            {

                Console.WriteLine("总学生数:{0}，总分数:{1}，平均分:{2}", list.Count, sum, avg);
            }
        }
        static void test2()
        {
            float money = 100.0f;
            try
            {
                login:
                while (true)
                {

            Console.WriteLine("请选择：1.存款\t2.取款");
            int a = int.Parse(Console.ReadLine());
            switch (a)
            {
                case 1:
                        Console.WriteLine("想要存放在银行账户中的余额:");
                        float num1 = float.Parse(Console.ReadLine());
                        money = money + num1;
                        Console.WriteLine("余额：" + money);
                        break;

                        case 2:
                        Console.WriteLine("想要从银行账户中提取的金额:");
                        float num2 = float.Parse(Console.ReadLine());
                        if (num2>money)
                        {
                            throw new ArgumentOutOfRangeException("取款金额大于余额，请重新输入");
                        }
                        money = money - num2;
                        Console.WriteLine("余额：" + money);
                        break;
                default:
                        Console.WriteLine("没有该选项！");
                    break;
                        
                    }
                mistake:
                    Console.WriteLine("是否继续操作(y/n)：");
                    string into = Console.ReadLine();
                    if (into == "n")
                    {
                        break;
                    }
                    else if (into == "y")
                    {
                        goto login;
                    }
                    else
                    {
                        Console.WriteLine("请输出正确指令（y|n）");
                        goto mistake;
                    }
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("异常已处理");
            }
        }
    }
}
